//Go语言基础之变量

// 变量定义：
package main

import "fmt"

// 注释：
// 单行注释，表示一些自己不太明白的业务，或者为了复杂的业务的内容关键的部分去表明标注
/*
多行注释：
写明自己的理解和当前代码的作用
*/
func main1() {
	//变量语法：要用var关键字来定义变量，并且还是把数据类型放在变量名的后面，
	//这是与Java和c++不同的地方
	//var 变量名 数据类型
	var a int
	var b string
	fmt.Println(a)
	fmt.Println(b)

	/*
		定义变量：如果没有给去赋值，那么会赋值为默认值
			整型类型：默认值为0；
			字符串类型：默认值为""
	*/
	var name string = "秦疆"
	fmt.Println(name) //打印
	var num int = 999
	fmt.Println(num)
	//goland快捷键：ctrl + D，将这一行复制到下一行

	//当然也可以同时定义多个变量;类似于Java中的普通代码块
	//用var()关键字
	var (
		val1 string = "why"
		val2 string = "xmh"
	)
	fmt.Println(val1)
	fmt.Println(val2)
	val2 = "wby"
	fmt.Println(val2) //变量可以修改，去重新赋值
}

//只定义变量不去使用，能否可以？
//在理论上是可以的，但是实际上在Go语言中不行的，Go语言是无法容忍的没有去使用的垃圾的变量
//并且是无意义的代码，所以会报错！

// 这个就是叫做语法糖（偷懒，简化开发！）
func main() {
	//是否可以不用var 直接定义变量呢？
	// 自动推导：一个短变量声明
	name := "Wang hong yu"
	age := 21
	// := 相当于快速定义变量，如果给这个变量进行赋值，那么会自动推导它的类型
	//var ， 数据类型的定义都是被省略的
	//这个数据类型要求的是go语言中基本的数据类型
	fmt.Println(name)
	fmt.Println(age)

	/*
		//定义变量namel
		var namel string
		namel := "wangfeng"
		fmt.Println(namel)
		//这个时候就会报错
		//注意：在快速声明中，如果 := 左边的变量已经存在了，那么它将会无法创建，无法重新定义
	*/
	fmt.Print("================")

	//定义变量namel
	var namel string
	name2 := "wangfeng"
	fmt.Println(namel)
	fmt.Println(name2)
	name2 = "lilei" //这个我们也可以对快速声明的变量进行修改
	fmt.Println(name2)
	var n float32 = 12.4
	fmt.Println(n)
}

//小结：
//1.定义变量的使用定式：var 变量名称 变量数据类型
//2.按变量赋值，定义的时候直接赋值，通过变量名进行赋值
//3.语法糖 := 表示可以通过它来快速进行定义变量，如果是基本数据类型，字符串，数字，它会自动推导类型
